
//build的作用主要是压缩(去掉换行和空格)，所以不需要使用connect和watch

//模块加载区
const gulp = require("gulp");
const fs = require("fs");
//gulp-concat 合并文件里面的内容
const concat = require("gulp-concat");
//压缩js代码
const uglify = require("gulp-uglify");
var pipeline = require('readable-stream').pipeline;

//压缩css
let cleanCSS = require('gulp-clean-css');

//npm install node-sass gulp-sass --save-dev
//需要安装python
const sass = require('gulp-sass');
sass.compiler = require('node-sass');

//压缩图片
const imagemin = require('gulp-imagemin');

//获取src里所有的js文件目录
const findSync = require("./utils/index").findSync;
const scripts = require("./conf/index").scripts;
const scssJSON = require("./conf/index").scss;


//存放所有src里面的js文件路径
let scriptsPathArray = null;
//存放所有gulp scripts时需要执行的任务也就是gulp scripts-文件名的集合
let scriptsTaskArray = [];

let scssTaskArray = [];


//功能定义区
/**
 * @function init 初始化功能 , 编列了scripts路径还有创建了 scripts 指令;
 * @function watchScripts 根据scripts对象实现的 watch 监听封装
 * @function mergeMyScripts 根据scripts 对象实现的scripts指令拆分,文件合并
 * 
 */


function init(){
    scriptsPathArray = findSync("./src/scripts").map(path =>{
        return "./" + path.replace(/\\/g,"/")
    })
    //禁止数组；
    let scriptsUnSaveArray = ["!./src/scripts/libs/*.js"];
    scriptsPathArray = scriptsPathArray.concat(scriptsUnSaveArray);
    mergeMyScripts(scripts);
    mergeMyScss(scssJSON);
}


//实现需要打包那个文件就执行gulp scripts-文件名,并且把文件名中的所有js打包成一个js文件
function mergeMyScripts(json){
    for(let attr in json){
        scriptsTaskArray.push("scripts-build-"+attr);
        gulp.task("scripts-build-" + attr,()=>{
            return gulp.src([json[attr].src+"*.js"])
            .pipe(concat(attr + ".js"))
            .pipe(gulp.dest("./dist/scripts"))
           
        })
    }
}

function mergeMyScss(json){
    for(let attr in json){
        scssTaskArray.push("scss-build-" + attr);
        gulp.task("scss-build-"+attr,()=>{
            return gulp.src([json[attr].src + "*.+(scss|sass)"])
                    .pipe(concat(attr + ".scss"))
                    .pipe(sass())//执行编译
                    .pipe(cleanCSS({debug:true},(details) =>{
                        console.log(`${details.name}: ${details.stats.originalSize}`);
                        console.log(`${details.name}: ${details.stats.minifiedSize}`);
                    }))
                    .pipe(gulp.dest("./dist/stylesheets"))
        })
    }
}

//指令定义区

/**
 * @task html :  转存html
 * @task connect : 服务器配置
 * @task watch : 监听
 * @task default : 自动开启环境
 * @task scripts : 打包js文件
 * 
 */

gulp.task("html-build",()=>{
    return gulp.src(["./src/*.html"]).pipe(gulp.dest("./dist"));
})



gulp.task("images-build",()=>{
    return gulp.src('./src/images/**/*')
            .pipe(imagemin())
            .pipe(gulp.dest('dist/images'))
})


gulp.task("scripts-build",scriptsTaskArray);
gulp.task("scss-build",scssTaskArray);

gulp.task("build",["html-build","scripts-build","scss-build","images-build"]);




// fs模块的帮助 => 取出文件夹下所有文件的名称;

// 初始化整个配置文件;

init();
